home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Micro on the Apple Volume 1 (1981)(Micro Ink)[no boot].zip / Micro on the Apple Volume 1 (1981)(Micro Ink)[no boot].do / APPLE PI.int < prev    next >
Text File  |  1996-12-24  |  3KB  |  101 lines

  1. 0 REM  *************************
  2. 1 REM  *                       *
  3. 2 REM  *       APPLE PI        *
  4. 3 REM  *   ROBERT J. BISHOP    *
  5. 4 REM  *                       *
  6. 5 REM  *       APPLE PI        *
  7. 6 REM  *                       *
  8. 7 REM  *  COPYRIGHT (C) 1981   *
  9. 8 REM  *    MICRO INK, INC.    *
  10. 9 REM  * CHELMSFORD, MA  01824 *
  11. 10 REM  *  ALL RIGHTS RESERVED  *
  12. 11 REM  *                       *
  13. 12 REM  *************************
  14. 13 REM 
  15. 14 CALL -936:VTAB 10:TAB 5:PRINT "HOW MANY DIGITS DO YOU WANT ";
  16. 15 INPUT SIZE
  17. 16 CALL -936
  18. 20 TEN=10:IF SIZE>200 THEN 50
  19. 30 TEN=100:SIZE=(SIZE+1)/2
  20. 50 POWER=5120:TERM=6144:RESULT=7168
  21. 60 DIV=1000:ADD=2000:SUB=3000:INIT=4000:COPY=5000
  22. 70 DIM CONSTANT(2):CONSTANT(1)=25:CONSTANT(2)=239
  23. 100 REM  MAIN LOOP
  24. 125 FOR PASS=1 TO 2
  25. 150 GOSUB INIT
  26. 200 GOSUB COPY
  27. 210 POINT=TERM:DIVIDE=EXP:GOSUB DIV
  28. 220 IF SIGN>0 THEN GOSUB ADD
  29. 230 IF SIGN<0 THEN GOSUB SUB
  30. 240 EXP=EXP+2:SIGN=-SIGN
  31. 250 POINT=POWER:DIVIDE=CONSTANT(PASS):GOSUB DIV
  32. 260 IF PASS=2 THEN GOSUB DIV
  33. 270 IF ZERO<>0 THEN 200
  34. 300 NEXT PASS
  35. 400 REM  PRINT THE RESULT
  36. 500 PRINT :PRINT 
  37. 510 PRINT "THE VALUE OF PI TO ";(TEN/100+1)*SIZE;" DECIMAL PLACES:":PRINT 
  38. 520 PRINT  PEEK (RESULT);".";
  39. 530 FOR PLACE=RESULT+1 TO RESULT+SIZE
  40. 540 IF TEN=10 THEN 570
  41. 560 IF  PEEK (PLACE)<10 THEN PRINT "0";
  42. 570 PRINT  PEEK (PLACE);
  43. 580 NEXT PLACE
  44. 590 PRINT 
  45. 600 END 
  46. 990 REM 
  47. 1000 REM  DIVISION SUBROUTINE
  48. 1010 DIGIT=0:ZERO=0
  49. 1020 FOR PLACE=POINT TO POINT+SIZE
  50. 1030 DIGIT=DIGIT+ PEEK (PLACE)
  51. 1040 QUOTIENT=DIGIT/DIVIDE
  52. 1050 RESIDUE=DIGIT MOD DIVIDE
  53. 1055 ZERO=ZERO OR (QUOTIENT+RESIDUE)
  54. 1060  POKE PLACE,QUOTIENT
  55. 1070 DIGIT=TEN*RESIDUE
  56. 1080 NEXT PLACE
  57. 1090 RETURN 
  58. 1200 REM 
  59. 2000 REM   ADDITION SUBROUTINE
  60. 2010 CARRY=0
  61. 2020 FOR PLACE=SIZE TO 0 STEP -1
  62. 2030 SUM= PEEK (RESULT+PLACE)+ PEEK (TERM+PLACE)+CARRY
  63. 2040 CARRY=0
  64. 2050 IF SUM<TEN THEN 2080
  65. 2060 SUM=SUM-TEN
  66. 2070 CARRY=1
  67. 2080  POKE RESULT+PLACE,SUM
  68. 2090 NEXT PLACE
  69. 2100 RETURN 
  70. 2990 REM 
  71. 3000 REM   SUBTRACTION SUBROUTINE 
  72. 3010 LOAN=0
  73. 3020 FOR PLACE=SIZE TO 0 STEP -1
  74. 3030 DIFFERENCE= PEEK (RESULT+PLACE)- PEEK (TERM+PLACE)-LOAN
  75. 3040 LOAN=0
  76. 3050 IF DIFFERENCE>=0 THEN 3080
  77. 3060 DIFFERENCE=DIFFERENCE+TEN
  78. 3070 LOAN=1
  79. 3080  POKE RESULT+PLACE,DIFFERENCE
  80. 3090 NEXT PLACE
  81. 3100 RETURN 
  82. 3990 REM 
  83. 4000 REM   INITIALIZE REGISTERS
  84. 4010 FOR PLACE=0 TO SIZE
  85. 4020  POKE POWER+PLACE,0
  86. 4030  POKE TERM+PLACE,0
  87. 4040 IF PASS=1 THEN  POKE RESULT+PLACE,0
  88. 4050 NEXT PLACE
  89. 4060  POKE POWER,16/PASS^2
  90. 4070 IF PASS=1 THEN DIVIDE=5
  91. 4080 IF PASS=2 THEN DIVIDE=239
  92. 4090 POINT=POWER:GOSUB DIV
  93. 4100 EXP=1:SIGN=3-2*PASS
  94. 4110 RETURN 
  95. 4990 REM 
  96. 5000 REM   COPY "POWER" INTO "TERM"
  97. 5010 FOR PLACE=0 TO SIZE
  98. 5020  POKE TERM+PLACE, PEEK (POWER+PLACE)
  99. 5030 NEXT PLACE
  100. 5040 RETURN 
  101.